类
类的定义
语法格式如下:
python
class <ClassName>:
<statements>
对象
对象就是类的一个实例。 可以通过 obj.name 和 obj.method 的方式来访问对象 obj 的属性 name 和方法 method.
python
class Animal:
name = 'animal'
def talk(self):
print("wow, I'm", self.name)
animal = Animal()
animal.talk() #wow, I'm animal
print(animal.name) #animal`
init 构造方法 与 self 类的对象
init方法一个类中一个特殊方法,也就是构造方法。构造函数用于对象初始化。
self 就是指类的对象本身。
init 左右都是两个下划线
python
def __init__(self,[parameters]):
self.<attributes> = <parameters>
构造方法接收外部传输进来的参数 parameters,分别赋值给内部属性 attributes。
python
#类的定义
class Animal:
name = 'animal'
def __init__(self, name1): #name1改成name也是可以的
self.name = name1
def talk(self):
print('wow, I\\'m ' + self.name)
#类的实例化,animal1的name变成了Jack
animal1 = Animal('Jack')
print(animal1.name) #输出Jack
#animal2的name变成了Tom
animal2 = Animal('Tom')
print(animal2.name) #输出Tom
self 必须要有
所有类的方法的第一个参数必须是 self。
要访问类的某个属性,必须使用 self.attribute 的方式来访问。
属性与方法
除了 name 属性之外,我们还可以定义更多其它的属性,如 weight 等。
除了构造方法init之外,我们还可以定义更多其它的方法,如 talk、setWeight 方法等。
python
#类的定义
class Animal:
name = ''
age = 0
def __init__(self, name, age):
self.name = name
self.age = age
def talk(self):
print('wow')
def older(self):
self.age += 1
#类的实例化
animal = Animal('Jack',10)
print(animal.age) #输出10
animal.older()
print(animal.age) #输出11
属性和方法默认是 public 公有的,有的时候,我们需要让属性和方法变为私有 private。
- public 公有的属性和方法,类的实例能够访问。
- private 私有的属性和方法,只有类的内部能够访问,类的实例不能访问。
私有 private 属性和方法,只需要在前面加上两个下划线__。
python
#类的定义
class Animal:
name = 'animal' #公有属性
__weight = 0.0 #私有属性
def __init__(self, name, weight): #私有方法
self.name = name
self.__weight = weight/1000 #私有属性,可以通过self.来访问
def __talk(self): #私有方法
print('wow')
def getWeight(self): #公有方法
return str(self.__weight) + 'kg'
def setWeight(self, weight): #公有方法
self.__weight = weight/1000
#类的实例化
animal = Animal('Jack',1000)
animal.setWeight(2000)
print(animal.getWeight()) #输出2.0kg
print(animal.name) #输出Jack
print(animal.__weight) #报错
类的应用
参考代码(不要轻易点开)
python
class Student:
name = ''
roll_id = '1'
score = 0
def __init__(self, name, roll_id, score):
self.name = name
self.roll_id = roll_id
self.score = score
def getGrade(self):
if 90<=self.score<=100:
return 'A'
elif 80<=self.score<90:
return 'B'
elif 70<=self.score<80:
return 'C'
elif 60<=self.score<70:
return 'D'
else:
return 'F'
def printFormat(self):
print(self.name, self.roll_id, self.getGrade())
n = int(input())
students = [0]*n
for i in range(n):
name, roll_id, score = input().split()
students[i] = Student(name, roll_id, int(score))
for i in range(n-1):
for j in range(n-i-1):
if students[j].score < students[j+1].score:
students[j],students[j+1] = students[j+1],students[j]
for student in students:
student.printFormat()